/*
 * @Author: wwssaabb
 * @Date: 2021-12-04 11:47:21
 * @LastEditTime: 2021-12-04 12:00:25
 * @FilePath: \handwritten-code\algorithm\有序数组的平方.js
 */

/* 
给你一个按 非递减顺序 排序的整数数组 nums， 返回 每个数字的平方 组成的新数组， 要求也按 非递减顺序 排序。

示例 1：
输入： nums = [-4, -1, 0, 3, 10]
输出：[0, 1, 9, 16, 100]
解释： 平方后， 数组变为[16, 1, 0, 9, 100]
排序后， 数组变为[0, 1, 9, 16, 100]

示例 2：
输入： nums = [-7, -3, 2, 3, 11]
输出：[4, 9, 9, 49, 121]

来源： 力扣（ LeetCode）
链接： https: //leetcode-cn.com/problems/squares-of-a-sorted-array
*/

//双指针，O(n)、O(1)
//思路：有序数组（有负数情况），负数平方之后顺序会改变，最大值在两边，最小值中间
var sortedSquares = function (nums) {
  let left = 0,
    right = nums.length - 1
  let res = Array(nums.length).fill(0)
  for (let i = res.length - 1; i >= 0; i--) {
    if (nums[left] ** 2 > nums[right] ** 2) {
      res[i] = nums[left] ** 2
      left++
    } else if (nums[left] ** 2 <= nums[right] ** 2) {
      res[i] = nums[right] ** 2
      right--
    }
  }
  return res
};

console.log(sortedSquares([-7, -3, 2, 3, 11]))
console.log(sortedSquares([-4, -1, 0, 3, 10]))